<?php
/**
 * @package index.php crond脚本管理文件
 *
 * 注意:
 *  1、所有的crond文件都不需要再次引入init.php
 *  
 * @version 1.0
 * @author Lane<61647649@qq.com>
 * @created time 2014-07-07 08:44
 **/
$time_start = microtime(true);
define('APP_NAME', 'admin');
define('__THIS__', strtr(__FILE__, array('\\' => '/','/index.php' => '','\index.php' => '')));
require_once __THIS__ . '/../../core/init.php';

/* 永不超时 */
ini_set('max_execution_time', 0);

/* 执行CROND */
exit(crond());

/* CROND函数 */
function crond()
{
    global $time_start;
    $time = microtime(true);
    require PATH_CONFIG . '/inc_crond.php';
    if (file_exists(PATH_DATA . '/task_list.php')) 
    {
        include PATH_DATA . '/task_list.php';
        $GLOBALS['CROND_TIMER']['the_time'] = array_merge($GLOBALS['CROND_TIMER']['the_time'], $task_list);
    }

    // echo '<pre>';print_r($GLOBALS['CROND_TIMER']);echo '</pre>';

    /* 提取要执行的文件 */
    $exe_file = array();
    foreach ($GLOBALS['CROND_TIMER']['the_format'] as $format)
    {
        // 获取需要执行的文件key
        $key = date($format, ceil($time));
        if (is_array(@$GLOBALS['CROND_TIMER']['the_time'][$key]))
        {
            $exe_file = array_merge($exe_file, $GLOBALS['CROND_TIMER']['the_time'][$key]);
        }
    }

    // echo "\n" . date('Y-m-d H:i', time()), "\n\n";

    /* 加载要执行的文件 */
    foreach ($exe_file as $file)
    {
        // 过滤掉所有带路径的crond文件,只留下文件不要路径，防止其他目录的文件被执行，这很危险
        $pathinfo = pathinfo($file);
        if ( empty($pathinfo['basename']) )
        {
            // 证明没有文件要执行，想要执行的是一个目录
            continue;
        }
            
        $file = $pathinfo['basename']; 
        echo '执行crond --- '. $file."\n";

        $runtime_start = microtime(true);
        $time = time();
        db::query("UPDATE `users_task` SET `lasttime`={$time} WHERE `filename` LIKE '%{$file}%' AND `status`=1");
        // 将需要执行的文件拿进来，开始执行
        include __THIS__ . '/' . $file;
        // 执行结束
        $runtime = microtime(true) - $runtime_start;
        db::query("UPDATE `users_task` SET `runtime`={$runtime} WHERE `filename` LIKE '%{$file}%' AND `status`=1");
        echo "{$file}, 执行时间: {$runtime}\n\n";
    }

    $time_total = microtime(true)-$time_start;
    echo "total:{$time_total}\n";
}

